The hypertext transfer protocol (HTTP) is a request/response protocol used to send data, most often text and images, from a server to a client. In conventional operation, an HTTP client sends, over the Transmission Control Protocol (TCP), a request for a specific resource to a server. The server processes the request and returns a response that includes a status or error message and, if available, the requested resource. Conventional HTTP communication sessions include a single channel between a server and a client to transmit data between the two. The channel can be used for multiple requests.
An HTTP connection can be used to transmit a variety of data from a server to a client. When an HTTP session is used to stream video or other data that is sensitive to delays in transmission or bandwidth available to the client, the client may receive delayed or incomplete video data. Generally, the backoff and retransmission mechanisms built into TCP can lead to undesirable delays that violate the timeliness requirement for streaming media. The client also may be required to buffer a considerable amount of video data before presenting the video to a user at an acceptable quality, in order to mitigate later-occurring effects such as communication delays or changes in available bandwidth.
The connectivity issues may be exacerbated given that the stream is usually received over a single channel, such structure also generally precluding the possibility of scaling or shaping the video transmission on-the-fly. Further, where on-the-fly scaling and transmission controls are implemented, they are generally server-side, and the client essentially takes what it can get.
Accordingly, it would be desirable to mitigate some of the transmission errors and delays currently inherent in video streaming by coordinating the stream between multiple HTTP channels, and shifting control of the stream from the servers to the clients.